/* $Id: UserDelegate.java 
 * Copyright (C) 2011, TRAKHEES
 *  
 * Revision History
 *
 * Date  			Author 		    	Remarks
 * ---------------------------------------------------------------------------------
 *
 */
package ae.pcfc.etks.online.common.delegate;

import java.util.List;

import ae.pcfc.etks.online.common.vo.ActivityVO;
import ae.pcfc.etks.online.common.vo.ClientEmailVO;
import ae.pcfc.etks.online.common.vo.PagingVO;
import ae.pcfc.etks.online.common.vo.PasswordResetVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaActivityVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaCompanyVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaPersonVO;
import ae.pcfc.etks.online.common.vo.UserDetailVO;
import ae.pcfc.etks.online.common.vo.UserVO;
import ae.pcfc.etks.online.common.vo.WorkflowRequestVO;


public interface UserDelegate extends BaseDelegate{
	
	/*public ClientCompanyVO userValidation(String userName, String password);*/
	/**
	 * findUserByUserName
	 * Method to find user by username
	 * @param strUserName
	 * @return
	 * UserVO
	 */
	public UserVO findUserByUserName(String strUserName);
	
	/**
	 * getUserList
	 * Method to get the list of all users
	 * @return
	 * List<UserVO>
	 */
	public List<UserVO> getUserList();
	
	/**
	 * getUserListByPagingParameters
	 * Method to get the list of users for a page based on the paging information
	 * @param pagingVO
	 * @return
	 * List<UserVO>
	 */
	public List<UserVO> getUserListByPagingParameters(PagingVO pagingVO);
	
	/**
	 * findUserByPrimaryKey
	 * Method to find user by primary key
	 * @param id
	 * @return
	 * UserVO
	 */
	public UserVO findUserByPrimaryKey(Long id);
	
	/**
	 * findUserByEmail
	 * Method to find the user by email
	 * @param email
	 * @return
	 * UserVO
	 */
	public UserVO findUserByEmail(String email);
	
	/**
	 * getUserNameAndPassword
	 * Method to email the user name and password to the user
	 * @param clientEmail
	 * void
	 */
	public void getUserNameAndPassword(ClientEmailVO clientEmail);
	
	/**
	 * resetPassword
	 * Method to reset password
	 * @param passwordResetVO
	 * void
	 */
	public void resetPassword(PasswordResetVO passwordResetVO);
	
	/**
	 * lockUser
	 * Method to lock the user
	 * @param userVO
	 * void
	 */
	public void lockUser(UserVO userVO);
	
	/**
	 * addUser
	 * Method to add the user
	 * @param userVO
	 * void
	 */
	public void addUser(UserVO userVO);
	
	/**
	 * findUserDetailByUserName
	 * Method to find user information by username
	 * @param strUserName
	 * @return
	 * UserDetailVO
	 */
	public UserDetailVO findUserDetailByUserName(String strUserName);
	
	/**
	 * searchUsersByTrakheesId
	 * Method to find the users registered under a client (trakhees id)
	 * @param strTrakheesId
	 * @return
	 * List<UserDetailVO>
	 */
	public List<UserDetailVO> searchUsersByTrakheesId(String strTrakheesId);
	
	/**
	 * searchUsersByClientPerson
	 * Method to find the users under a list of client persons.
	 * The list of client persons is populated by searching the client persons based on the search criteria provided
	 * @param searchCriteriaPersonVO
	 * @return
	 * List<UserDetailVO>
	 */
	public List<UserDetailVO> searchUsersByClientPerson(SearchCriteriaPersonVO searchCriteriaPersonVO);	
	
	/**
	 * searchUsersByClientCompany
	 * Method to find the users under a list of client companies.
	 * The list of client companies is populated by searching the client companies based on the search criteria provided
	 * @param searchCriteriaCompanyVO
	 * @return
	 * List<UserDetailVO>
	 */
	public List<UserDetailVO> searchUsersByClientCompany(SearchCriteriaCompanyVO searchCriteriaCompanyVO);
	
	/**
	 * findActivitiesOfClientCompany
	 * Method to find the activities of a client company by searching with criteria
	 * @param searchCriteriaActivityVO
	 * @return
	 * List<ActivityVO>
	 */
	public List<ActivityVO> findActivitiesOfClientCompany(SearchCriteriaActivityVO searchCriteriaActivityVO);

	/**
	 * getUserWorkflowRequests
	 * 
	 * @param userName
	 * @return
	 * List<Object>
	 */
	public List<WorkflowRequestVO> getUserWorkflowRequests(String userName);
	
	public List<String> getTaskInformation(Integer incedentNo, String processCode);
	
}
